package com.zp.self.module.level_4_算法练习.数据结构.String;
import org.junit.Test;

/**
 * @author By ZengPeng
 */
public class 力扣_832_翻转图像 {
    @Test
    public void main() {
        
        Solution solution = new 力扣_832_翻转图像().new Solution();
        System.out.println(solution);
    }

    /**
     题目：给定一个 n x n 的二进制矩阵 image ，先 水平 翻转图像，然后 反转 图像并返回 结果 。
         水平翻转图片就是将图片的每一行都进行翻转，即逆序。
         例如，水平翻转 [1,1,0] 的结果是 [0,1,1]。
         反转图片的意思是图片中的 0 全部被 1 替换， 1 全部被 0 替换。
         例如，反转 [0,1,1] 的结果是 [1,0,0]。

     示例 1：
     输入：image = [[1,1,0],[1,0,1],[0,0,0]]
     输出：[[1,0,0],[0,1,0],[1,1,1]]
     解释：首先翻转每一行: [[0,1,1],[1,0,1],[0,0,0]]；
     然后反转图片: [[1,0,0],[0,1,0],[1,1,1]]

     示例 2：
     输入：image = [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
     输出：[[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
     解释：首先翻转每一行: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]]；
     然后反转图片: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]


     分析：【P 💔】
        1.交换+异或1：遍历数组
                --执行耗时:0 ms,击败了100.00% 的Java用户
                --编码耗时:10:43

     边界值 & 注意点：
        1.
     **/
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int[][] flipAndInvertImage(int[][] image) {
        int len=image[0].length-1,mid = len/2,midvalue;
        for (int[] ints : image) {
            for (int i = 0; i <= mid; i++) {
                midvalue =ints[i];
                ints[i] = ints[len-i]^1;
                ints[len-i] = midvalue^1;
            }
        }
        return image;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}